package com.zy.design.pattern.adapter;

import com.zy.design.pattern.adapter.base.IFileSys;
import com.zy.design.pattern.adapter.base.IKvCache;
import com.zy.design.pattern.adapter.comb.CephFile;
import com.zy.design.pattern.adapter.comb.CephFileAdapter;
import com.zy.design.pattern.adapter.comb.MinioFile;
import com.zy.design.pattern.adapter.comb.MinioFileAdapter;
import com.zy.design.pattern.adapter.extend.MemCacheAdapter;
import com.zy.design.pattern.adapter.extend.RedisAdapter;

/**
 * @author zhaoyi
 * @date 2021/4/14 16:27
 *
 * 适配器 Adapter (将不兼容的接口转换成兼容的接口)
 *  实现方式
 *      1 类适配器   (继承)
 *      2 对象适配器 (组合)
 *
 *  场景
 *      1 封装有设计缺陷的接口
 *      2 统一多个类的接口设计
 *      3 替换外部依赖的系统
 *      4 兼容老版本的接口
 *      5 适配不同格式的数据
 */
public class Test {

    public static void main(String[] args) {

        /**
         * 基于继承的 类适配器
         *
         * 统一了 MemCache和 Redis 的操作
         * 扩展性更好，更加符合开闭原则
         */
        IKvCache redis = new RedisAdapter();
        redis.put("1","redis");

        IKvCache memCache = new MemCacheAdapter();
        memCache.put("1","memCache");
        memCache.get("1");

        /**
         * 基于组合的 对象适配器
         */
        IFileSys fileSystem = new CephFileAdapter(new CephFile());
        IFileSys fileSystem2 = new MinioFileAdapter(new MinioFile());

        fileSystem.upFile(new byte[2],"/data/image");
        fileSystem2.getFile("/data/image");




    }

}
